// import {defineConfig} from 'vite'
import vue from '@vitejs/plugin-vue'        // vite的vue配置
import {resolve} from "path";
import WindiCSS from 'vite-plugin-windicss'     // 引入windicss
import Inspect from 'vite-plugin-inspect'       // 解析文件编译过程
import VueSetupExtend from 'vite-plugin-vue-setup-extend' // setup语法糖配置name属性
import AutoImport from 'unplugin-auto-import/vite'  // 自动导入vue的属性
import Components from 'unplugin-vue-components/vite'   // 自动导入公共组件
import {NaiveUiResolver} from 'unplugin-vue-components/resolvers' // 自动导入naive
import {viteMockServe} from "vite-plugin-mock";     // mock配置
import { visualizer } from "rollup-plugin-visualizer";
import sftpUploader from 'sftp-uploader'    // 自动部署
import  * as path from "path"



const sftpConfig = {
    dir: path.join(__dirname, 'dist/'), // 需要上传文件的目录
    url: '/home/qianduan/dist/', // 上传到的目录
    host: '101.43.194.47', // sftp地址
    port: '22', // sftp端口
    username: '********', // 账号
    password: '********', // 密码
    // 延迟上传时间（毫秒），解决部分项目会触发多次打包完成的问题
    delay: 0,
    // 上传文件过滤器，可以过滤掉不需要的文件，返回false将不会上传该文件（可选）
    uploadFilter: (file) => {
        // console.log(file)
        // return false
        return true
    },
    // ! 删除文件过滤器，可以过滤掉不需要删除的文件，返回false将不会删除文件（可选）
    // !!! 注意这里，如果不返回false,会将上传目录下的所有文件清空
    deleteFilter: (file) => {
        console.log(file)
        return false
    },
    // 预览链接接地址（可选）
    previewPath: '',
}


export default ({command}) => {
    return {
        plugins: [vue(), VueSetupExtend(), Inspect(), WindiCSS(),
            visualizer({emitFile:true,gzipSize:true}),
            AutoImport({
                imports: ['vue',],
            }),
            Components({resolvers: [NaiveUiResolver(),]}),
            viteMockServe({
                // default
                mockPath: 'mock',
                localEnabled: command === 'serve',
            }),
            sftpUploader(sftpConfig)
        ],
        resolve: {
            alias: {
                '@': resolve(__dirname, 'src'),
            },
        },
        server: {
            open: false,
            host: '0.0.0.0',
            port: 5002,
            proxy: {
                '/proxy': {
                    target: 'http://101.43.194.47:8005/',
                    // target: 'http://127.0.0.1:8000/',
                    changeOrigin: true,
                    rewrite: (path) => path.replace(/^\/proxy/, '')
                },
            },
        },
        build:{
            minify: 'terser',
            terserOptions: {
                compress: {
                    //生产环境时移除console.log()
                    drop_console: true,
                    drop_debugger: true,
                },
            },
            rollupOptions: {
                output:{
                    manualChunks(id) {
                        if (id.includes('node_modules')) {
                            return id.toString().split('node_modules/')[1].split('/')[0].toString();    // npm打包
                            // return id.toString().split('node_modules/')[1].split('/')[0].toString();     // pnpm的打包
                            // const arr = id.toString().split("node_modules/")[2].split("/")
                            // console.log(arr,"文件名字")
                            // switch(arr[0]){
                            //     case '@wangedit': // 自然框架
                            //     case 'vuedraggable':
                            //     case '@vue':
                            //     case 'naive-ui': // UI 库
                            //     case '@vicons/antd': // 图标
                            //     case '@vicons/carbon': // 图标
                            //     case '@vicons/fa': // 图标
                            //     case '@vicons/fluent': // 图标
                            //     case '@vicons/ionicons4': // 图标
                            //     case '@vicons/ionicons5': // 图标
                            //     case '@vicons/material': // 图标
                            //     case '@vicons/tabler': // 图标
                            //         return '_' + arr[0]
                            //     default :
                            //         return '__vendor'
                            // }
                        }
                    },
                }
            }
        },

    }
}
